Pensar quais orientações são mais gerais e quais são importantes de acompanhar cada código.
Sobre os pacotes, seria bom ter uma listinha de ‘library’ no início de cada código? Talvez com uma breve explicação do que cada pacote faz, versão mínima… não sei.
OBS: essa tabela é uma referência para obtermos as versões dos pacotes ao final do desenvolvimento do script. Ela está automatizada, então quando terminarmos ele precisamos refaze-lo de forma que não gere mais mudança nas versões (tem que fazer a tabela na mão mesmo…).
# carregar pacote para formatar tabela
library(flextable)
# gerar informações sobre os pacotes carregados
info <- sessionInfo()
# gerar tabela com os pacotes e versões
tibble::tribble(
~Pacotes, ~Versão,
version$language, version$version.string,
info$otherPkgs$dplyr$Package, info$otherPkgs$dplyr$Version,
info$otherPkgs$Distance$Package, info$otherPkgs$Distance$Version,
info$otherPkgs$DT$Package, info$otherPkgs$DT$Version,
info$otherPkgs$flextable$Package, info$otherPkgs$flextable$Version,
info$otherPkgs$plotly$Package, info$otherPkgs$plotly$Version,
info$otherPkgs$readr$Package, info$otherPkgs$readr$Version,
info$otherPkgs$tibble$Package, info$otherPkgs$tibble$Version,
info$otherPkgs$tidyr$Package, info$otherPkgs$tidyr$Version,
) |>
qflextable() |>
set_caption(
"Tabela xx = configuração de pacotes necessários e respectivas versões mínimas que devem ser utilizadas para reproduzir os códigos"
)
Pacotes | Versão |
|---|---|
R | R version 4.2.3 (2023-03-15) |
dplyr | 1.1.1 |
Distance | 1.0.7 |
DT | 0.27 |
flextable | 0.9.1 |
plotly | 4.10.1 |
readr | 2.1.4 |
tibble | 3.2.1 |
tidyr | 1.3.0 |
NA
NA
Algumas funções foram escritas para funcionar tomando como base de
dados de referência a planilha em formato excel
Planilha Oficial consolidada de Masto-aves 2014-21 Validada CEMAVE CPB CENAP.xlsx
disponibilizada pelo Projeto Monitora. Estas funções carregam os dados e
fazem uma série de transformações para devolve-los no formato
padronizado do programa DISTANCE para Windows. Portanto, para garantir a
reprodutibilidade dos códigos produzidos em versões atualizadas da base
de dados do Monitora, é importante tomar alguns cuidados.
O primeiro e mais importante cuidado é manter os mesmos nomes das
colunas em versões atualizadas da base de dados do Monitora. As
primeiras funções, além de carregar os dados, aplicam uma série de
transformações. Os nomes das colunas são alterados, e a essas são
atribuídos tipos (data, caracter, fator , inteiro e numérico), linhas
são eliminadas e novas colunas são gereadas. Para exemplificar, veja o
código abaixo. Ele foi escrito para executar as primeiras transformações
nos dados e constitui o corpo da função
carregar_dados_filtrados().
O trecho do código que vai da linha 101 a 113 serve selecionar apenas as colunas de interesse presente nos dados originais. Note que os nomes das planilhas originais constam nesse trecho. Caso o nome de qualque uma dessas colunas seja alterado a função deixará de funcionar.
Outro aspecto importante é a presença de observações não preenchidas
(ex. células vazias) nos dados originais. A função foi desenha para
resolver alguns problemas presentes nos dados originais. Por exemplo,
nas o trecho do código das linhas xx a xx as observações vazias
(NAs) são substituidas pelo valor correto na coluna
day_effort. Essa correção continnuará sendo realizada em
versões atualizadas dos dados do Monitora. Porém, se outras colunas além
das que estão sendo corrigidas possuirem observações vazias os dados
serão carregados e transformados, porém outras funções podem ter o seu
funcionamento comprometido. Por exemplo… (funções de visualização e do
pacote distance que podem naõ funcionar devido a ausência de
observação)
Outros cuidados…
Imaginando que a planilha de dados do monitora é algo dinâmico, que o nome das colunas pode ser editado…
Um passo a passo de como salvar arquivo com os códigos e abrir.. Por exemplo, da forma como está é interessante descompactar a pasta e acessar os arquivos abrindo o projeto. Acho que isso pode mudar, dependendo de como viermos a entregar o produto final. Então podemos pensar nessa explicação no final.
Se a gente ainda precisar ter algum tipo de preocupação quanto a isso. Acho que não.
Não é trivial para quem não está acostumado… usar runApp, knit… até mesmo o shift+enter para rodar as linhas de comando uma a uma
# carregar pacote
library(DT)
# carregar a função
source(
corrigir_diretorio(
corrige = 'R/carregar_dados_completos.R'
)
)
# carregar dados para o R
dados_completos <- carregar_dados_completos()
dados_completos |>
slice(1:500) |>
datatable(
filter = list(
position = "top"
)
)
Sistematizar os critérios utilizados para eliminar observações (linhas).
n_sp_validada <- dados_completos |>
count(validation)
Foram selecionadas apenas as observações validadas ao nível de espécie, somando um total 20790 observações.
Critŕios:
WWF - Projeto Monitora
source(
corrigir_diretorio(
corrige = "R/contar_UCs.R"
)
)
n_ucs <- contar_UCs(
dados_selecionados
)
Os dados são provenientes de 40 unidades de conservação ao todo.
source(
corrigir_diretorio(
corrige = "R/contar_sp.R"
)
)
n_sp <- contar_sp(
dados_completos
)
Foram coletados dados para 209 espécies.
As UC’s foram filtradas de acordo com o número de observações permitir a visualização.
A função de contagem de UC’s gerou 40 UC’s, mas só há observações para 38. Lembrar de verificar isso.
Adicionar o nome completo da UC na caixa interativa do gráfico. Identificar os plotes com subtítulos ex tentar adicionar título aos plotes
Tabela interativa com os dados completos de contagem de observações por UC.
dados_selecionados |>
dplyr::count(uc_name, uc_name_abv) |>
DT::datatable(filter = list(position = "top"))
Tabela interativa para consulta do número de observações por espécie.
dados1 |>
dplyr::filter(validacao == "E") |>
dplyr::count(especie) |>
DT::datatable(filter = list(position = "top"))
Tabela interativa para consulta do número de observações por espécie e por UC.
dados1 |>
dplyr::filter(validacao == "E") |>
dplyr::count(ucs, especie) |>
DT::datatable(filter = list(position = "top"))
Tabela interativa para consultar quantas observações foram realizadas por ano em cada UC
dados1 |>
dplyr::count(ano, ucs) |>
DT::datatable(filter = list(position = "top"))
Tabela interativa para consultar quantas observações foram realizadas para cada espécie em cada ano
dados1 |>
dplyr::count(ano, especie) |>
DT::datatable(filter = list(position = "top"))
Tabela interativa para consultar quantas observações foram realizadas para cada espécie em cada ano
dados1 |>
dplyr::count(ano, ucs, especie) |>
DT::datatable(filter = list(position = "top"))
dados1 |>
dplyr::count(ano, season, uc_name, sp) |>
DT::datatable(filter = list(position = "top"))
Possíveis estratificações espaciais – EAs/UCs
- UCs/Espécies
# carregar dados_filtrados.R da pasta data para o R
dados_filtrados <- readr::read_rds(corrigir_diretorio(corrige = "data/dados_filtrados.rds"))
# gerar o gráfico exploratório da distribuição de distâncias perpendiculares para a espécies Dasyrocta croconota na Resex Tapajós-Arapiuns
fig <- dados_filtrados |>
# excluir NA's da variável distance
tidyr::drop_na(distance) |>
grafico_exploratorio3()
fig
– As covariáveis devem ser pensadas de acordo com o grupo taxonômico. Espécies que formam grupos devem ter a covariável ‘size’.
As estratégias de estratificação podem ser substituídas por covariáveis também (estratos espaciais/ ano)
Como covariável temporal, pode se pensar em usar, além do ano, a estação do ano (season), o horário do dia (para animais que variam a atividade). O horário do dia pode ser convertido em tempo após nascer do sol (como no exemplo). Mas para isso é necessário criar essa variável no dataset. E não é trivial porque precisa saber o horário de nascer do sol em cada dia/local para calcular.
Exemplo de Gráficos de Marques et al. 2007
Esse trabalho do Marque et al. 2007 é uma boa referência de como usar as abordagens CDS global, CDS estratificada e MCDS.
Aqui, é possível testar alguns caminhos de modelos. A estratificação só faz sentido quando o volume de dados for grande. Ainda assim o uso de covariáveis pode substituir a estratificação. Pensar em como orientar o uso dessas abordagens
Aqui precisa ver direitinho os cuidados que precisa ter para ajustar as funções nos dados estratificados. Acho que faz em blocos. Vai aplicando os mesmos parâmetros para todos os estratos a cada modelo.
para cada estrato (espacial ou temporal) usar - função ds do Distance (argumentos básicos: truncation; key, adjustment, scale… estudar argumentos para ver se mais algum interessa)
Aqui não faz sentido estratificar
Dicas em Miller et al. 2019 sobre covariáveis (ver arquivo no driver).
– para gerar Q-Q plots e testes associados
– função summarize_ds_models
DICAS EXTRAS DE MILLER et al. 2019
Como organizar
Interatividade
reactive() eventReactive()
observe() observeEvent()
reactiveVal() reactiveValues()
isolate()
gerar o tal documento automatizado contendo todo esse fluxo mais os resultados das análises;
tentar transformar isso num dashboard/aplicativo único integrando cada etapa dessa numa das abas do dashboard
Pacote targets seria últil?
Effort - extensão total percorrida em metros no
conjunto de dados seleciodo.